package com.sxj.corejava.code14_Lambda表达式;

public class Test01_基本用法 {
    public static void main(String[] args) {
        // 匿名内部类用法
        SomeInterface someInterface = new SomeInterface() {
            @Override
            public void doSome() {
                System.out.println("Hello World");
            }
        };
        someInterface.doSome();

        // Lambda表达式用法
        // 如果参数列表没有参数,直接使用一对小括号表示
        // 当方法体只有一行代码时,大括号可以省略
        SomeInterface someInterface2 = () -> System.out.println("Hello World");

        someInterface2.doSome();

        System.out.println("***************************************");

        // 匿名内部类用法
        OtherInterface otherInterface = new OtherInterface() {
            @Override
            public void doOther(String s) {
                System.out.println(s);
            }
        };
        otherInterface.doOther("admin");

        // Lambda表达式用法
        // 如果参数列表有参数,且只有一个,可以省略括号,直接写形参名
        OtherInterface otherInterface2 = a -> System.out.println(a);
        otherInterface2.doOther("Hello Lambda");

        System.out.println("***************************************");

        // 匿名内部类用法
        MyInterface myInterface = new MyInterface() {
            @Override
            public String test(String s1, String s2) {
                return s1 + s2;
            }
        };
        System.out.println(myInterface.test("Hello ", "World"));

        // Lambda表达式用法
        // 如果方法体中只有一行代码,且该代码为:return xxx,可以省略大括号与return关键字,直接写返回的值
        MyInterface myInterface2 = (s1, s2) -> s1 + s2;
        System.out.println(myInterface2.test("Hello ", "Lambda"));
    }
}

interface SomeInterface {
    void doSome();
}

interface OtherInterface {
    void doOther(String s);
}

interface MyInterface {
    String test(String s1, String s2);
}
